package demo32;

import java.util.LinkedList;

public class Test {

    public static void main(String[] args) {
//        String s = ")()())";
//        String s = "(()";
        String s = "(()(()()())()()()()()()()()(())(()()()()()()()()(((()()()())))))()()()()))))()(()()((()()()()()()()()";
//        String s = "";
//        String s = "()(()";
//        String s = "(()";
//        String s = "()(()";
        System.out.println(new Test().longestValidParentheses(s));
    }


    public int longestValidParentheses(String s) {
        char[] chs = s.toCharArray();
        LinkedList<Integer> list = new LinkedList<>();
        int max = 0;
        for (int i = 0,j = -1; i < chs.length; i++) {
            if(chs[i] == '('){
                list.addFirst(i);
            }else {
                if(list.size() == 0){
                    //栈空了
                    j = i;
                }else{
                    list.removeFirst();
                    int index = j;
                    if(list.size() != 0){
                        index = list.getFirst();
                    }
                    max = Math.max(max,(i - index));
                }
            }
        }
        return max;
    }

//    public void findLongest(char[] chs,int[] maxLength,int start){
//        //模拟栈
//        int firtindex = start;//第一次匹配上的位置
//        boolean isFirst = true;//是不是第一次匹配上
//        int stack = 0;
//        int index = 0;
//        int length = 0;
//        int turn = 0;
//        boolean flag = true;
//        //栈有没有试过清到0
//        boolean stackHasZero = false;
//        if(start == chs.length || chs.length*2 < maxLength[0]){
//            //后续没比较的必要了，字符串太短了
//            return ;
//        }

//    }


}
